package com.smart.community.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.smart.community.user.entity.UserPropertyCompany;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户物业公司管理Mapper接口
 *
 * @author Wu.Liang
 * @since 2025-07-05
 */
@Mapper
public interface UserPropertyCompanyMapper extends BaseMapper<UserPropertyCompany> {

    /**
     * 根据ID查询用户物业公司
     *
     * @param id 主键ID
     * @return 用户物业公司信息
     */
    UserPropertyCompany selectById(@Param("id") Long id);

    /**
     * 分页查询用户物业公司列表
     *
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @param status 状态
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 用户物业公司列表
     */
    List<UserPropertyCompany> selectPage(@Param("userId") Long userId,
                                        @Param("propertyCompanyId") Long propertyCompanyId,
                                        @Param("status") Integer status,
                                        @Param("offset") Integer offset,
                                        @Param("limit") Integer limit);

    /**
     * 统计用户物业公司数量
     *
     * @param userId 用户ID
     * @param propertyCompanyId 物业公司ID
     * @param status 状态
     * @return 数量
     */
    Long count(@Param("userId") Long userId,
               @Param("propertyCompanyId") Long propertyCompanyId,
               @Param("status") Integer status);

    /**
     * 新增用户物业公司
     *
     * @param userPropertyCompany 用户物业公司信息
     * @return 影响行数
     */
    int insert(UserPropertyCompany userPropertyCompany);

    /**
     * 更新用户物业公司
     *
     * @param userPropertyCompany 用户物业公司信息
     * @return 影响行数
     */
    int updateById(UserPropertyCompany userPropertyCompany);

    /**
     * 删除用户物业公司
     *
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据用户ID查询物业公司列表
     *
     * @param userId 用户ID
     * @return 用户物业公司列表
     */
    List<UserPropertyCompany> getUserPropertyCompanies(@Param("userId") Long userId);

    /**
     * 根据物业公司ID查询用户列表
     *
     * @param propertyCompanyId 物业公司ID
     * @return 用户物业公司列表
     */
    List<UserPropertyCompany> selectByPropertyCompanyId(@Param("propertyCompanyId") Long propertyCompanyId);

    /**
     * 删除用户关联的所有物业公司
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    int deleteByUserId(@Param("userId") Long userId);

    /**
     * 批量插入用户物业公司关联
     *
     * @param userPropertyCompanies 用户物业公司列表
     * @return 影响行数
     */
    int batchInsert(@Param("list") List<UserPropertyCompany> userPropertyCompanies);
} 